﻿#pragma once
#include "afx.h"

class CMemPoolUnit;

// 校验由外围的MemPool负责
// MemBlock只负责管理内存块，所以不需考虑块头
class CMemBlock :
	public CObject
{
public:
	CMemBlock(int unitSize, int unitCount);
	~CMemBlock(void);

	// 判断是否已满
	bool isFull(void) const { return (m_freeUnitCount == 0); }

	// 获取一个单元
	void alloc(CMemPoolUnit **pUnit);

	// 释放一个单元
	void free(CMemPoolUnit * pUnit);

protected:
	const int	m_totalUnitCount; //块内总的单元数
	const int	m_unitSize;		//每个单元的字节数大小，也就是装入的对象的大小

	int			m_blockSize;		//块的总大小
	int			m_freeUnitCount;	// 空闲块数
	char		* m_pbuffer;		// 区块的起始位置的指针


	CPtrList	m_freeUnits;	// 空闲块列表,初始化为每个内存单元的起始地址
};
